#include <stdio.h>

const int MAX = 3;

int main()
{
    int var = 20; /* 实际变量的声明 */
    int *ip;      /* 指针变量的声明 */

    ip = &var; /* 在指针变量中存储 var 的地址 */

    printf("var 变量的地址: %p\n", &var);

    /* 在指针变量中存储的地址 */
    printf("ip 变量存储的地址: %p\n", ip);

    /* 使用指针访问值 */
    printf("*ip 变量的值: %d\n", *ip);

    int *ptr = NULL;

    if (ptr)
    {
        printf("ptr 的地址是 %p\n", ptr);
    }
    else
    {
        printf("ptr 的地址是 %p\n", ptr);
    }

    int vars[] = {10, 100, 200};
    int i;

    /* 指针中的数组地址 */
    ptr = vars;
    for (i = 0; i < MAX; i++)
    {

        printf("存储地址：vars[%d] = %p\n", i, ptr);
        printf("存储值：vars[%d] = %d\n", i, *ptr);

        /* 指向下一个位置 */
        ptr++;
    }

    /* 指针中最后一个元素的地址 */
    ptr = &vars[MAX - 1];
    for (i = MAX; i > 0; i--)
    {

        printf("存储地址：var[%d] = %p\n", i - 1, ptr);
        printf("存储值：var[%d] = %d\n", i - 1, *ptr);

        /* 指向下一个位置 */
        ptr--;
    }

    /* 指针中第一个元素的地址 */
    ptr = vars;
    i = 0;
    while (ptr <= &vars[MAX - 1])
    {

        printf("存储地址：var[%d] = %p\n", i, ptr);
        printf("存储值：var[%d] = %d\n", i, *ptr);

        /* 指向上一个位置 */
        ptr++;
        i++;
    }

    return 0;
}